// 这个文件中就是axios一些属性以及封装方法
// 引入axios核心库
import axios from "axios";

// 引入参数从转化工具
import qsString from "querystring"

// 设置一个基础地址
let baseUrl = 'http://localhost:3000/api'

// 拦截器
// 请求拦截器
axios.interceptors.request.use(req => {
    // 请求拦截器的使用场景，这里全部是针对请求做的一些操作
    // 我们常用的就是添加请求头，比如token，比如加密信息，比如终端类型(ios/app/安卓)
    // req.headers.xx=xx
    return req
})

// 响应拦截器

axios.interceptors.response.use(res => {
    // 响应拦截器的使用场景，这里全部是针对响应进行的一些操作
    // 我们常用的是全局错误拦截，比如：未添加token 比如 token失效

    return res
})


// 封装请求方式：get / post / put /delete 大部分的后端用的是get，post

/*get：params:url,请求地址链接 params 参数 默认是{}
*/
export const get = (url, params = {}) => {
    return new Promise((resolve, reject) => {
        axios.get(baseUrl + url, {
            params
        })
            .then(res => resolve(res))
            .catch(err => reject(err))
    })
}






export const post = (url, params = {}, isFile = false) => {
    let data = {}
    // post 参数比较特殊，分为两种情况
    // 有上传文件
    if (isFile) {
        //https://developer.mozilla.org/zh-CN/docs/Web/API/FormData
        data = new FormData()
        for (let i in params) {
            data.append(i, params[i])
        }
    } else {
        // 没有上传文件
        data = qsString.stringify(params)
    }
    // 无上传文件
    return new Promise((resolve, reject) => {
        axios.post(baseUrl + url, data)
            .then(res => resolve(res))
            .catch(err => reject(err))
    })

}